SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE FUNCTION [dbo].[fnLiqDiasTrabajadosSR] (@Agente INT,  @Desde DATETIME, @Hasta DATETIME, @Ambito INT, @OrganizacionAnalizar INT,  @SituacionRevista INT  )  
RETURNS INT AS  
BEGIN 

 -- @Ambito = (0 Todos, 1 Publico, 2 Privado)

declare @PA datetime
declare @PB datetime
declare @FA datetime
declare @FB datetime
declare @Baja varchar(1)
declare @Licencia int
declare @Resultado int
declare @DiasHabiles int
declare @meses int
declare @anios int

Select @PA = @Desde, @PB=@Desde, @Resultado=0, @diashabiles=0
 -- @SituacionRevista = (0 Todos, sino el idSituacionRevista deseado)
 -- @Ambito = (0 Todos, 1 Publico, 2 Privado)


DECLARE Subservicios CURSOR forward_only  FOR

/*ORIGINAL
SELECT ss.FechaAlta, ss.FechaBaja, ss.Baja, Licencia 
	FROM tb_SubserviciosAgentes ss, tb_ServiciosAgentes s
	INNER JOIN tb_Organizaciones O ON S.UbicacionOrig = O.idOrganizaciones 
	WHERE s.agente = @Agente AND (ss.FechaBaja Is Null or ss.FechaBaja>=@Desde) AND ss.FechaAlta<=@Hasta 
		AND s.idServicioAgente = ss.ServicioAgente
		AND (@SituacionRevista IS NULL OR S.SituacionRevista = @SituacionRevista) 				
		AND ((@Ambito=0 AND o.EsPrivada IN('N','S')) OR (@Ambito=1 AND o.EsPrivada IN('N')) OR (@Ambito=2 AND o.EsPrivada IN('S')))
		AND ((@OrganizacionAnalizar IS NULL AND 1=1) OR (@OrganizacionAnalizar IS NOT NULL AND S.UbicacionOrig = @OrganizacionAnalizar))
	ORDER BY ss.FechaAlta
---FIN ORIGINAL*/
/*
SELECT DISTINCT s.FechaAlta, s.FechaBaja, s.Baja
		FROM tb_ServiciosAgentes S
		INNER JOIN tb_SubserviciosAgentes SS ON SS.ServicioAgente = S.idServicioAgente
		INNER JOIN tb_Plazas P ON P.idPlaza = SS.Plaza
		INNER JOIN tb_CargosSalariales C ON C.idCargo =S.CargoSalarial
		INNER JOIN tb_Organizaciones O ON O.idOrganizaciones = P.Organizacion
		INNER JOIN tb_Funciones F ON F.idFuncion = P.Funcion
		INNER JOIN tb_TiposDeFuncion TF ON TF.idTipoFuncion = F.TipoDeFuncion
		INNER JOIN tb_Agentes A ON A.idAgente = S.Agente

WHERE  s.agente = @Agente AND (ss.FechaBaja Is Null or ss.FechaBaja>=@Desde) AND ss.FechaAlta<=@Hasta 
	AND s.causabaja NOT IN (2,16)				--renuncia
	AND (@SituacionRevista IS NULL OR S.SituacionRevista = @SituacionRevista) 				
	AND TF.idTipoFuncion NOT IN (13,18) 				--Directivo FAlumnos, Directivo NFAlumno
	AND O.Esprivada = 'N'								--Público
	AND ((@OrganizacionAnalizar IS NULL AND 1=1) OR (@OrganizacionAnalizar IS NOT NULL AND S.UbicacionOrig = @OrganizacionAnalizar))
--preguntar
	AND S.cargoSalarial NOT IN (79,6104,6105)			-- 'ASISTENTE TECNICO DE PROYECTOS' / 'ANALISTA PRINCIPAL TEC. DOC.' / 'ANALISTA AUXILIAR TEC.DOC.'
--veo los que cambiaron de cargo
--	AND S.cargosalarial IN (2821,3433,3431,3432)
--	AND S.CargoSalarial IN (3129,2829,3218,3310,3528)
	AND S.CargoSalarial IN (2901,3001)	
	AND O.cuise > 300  AND O.Cuise NOT IN (2600) 	AND O.Cuise NOT BETWEEN 9000 AND 9999
	AND S.TipoDeServicio = 1 
	AND (S.EstaEnProcesoDeTitularizacion IS NULL OR  S.EstaEnProcesoDeTitularizacion = 'N')
	AND S.CargoSalarial  NOT IN (SELECT IDCargo FROM tb_CargosSalariales WHERE Escalafon IN (15, 24))
	ORDER BY s.FechaAlta

*/


SELECT DISTINCT CASE WHEN s.FechaAlta < @Desde THEN s.FechaAlta ELSE @Desde END AS FechaAlta , s.FechaBaja, s.Baja
		FROM tb_ServiciosAgentes S
		INNER JOIN tb_SubserviciosAgentes SS ON SS.ServicioAgente = S.idServicioAgente
		INNER JOIN tb_Plazas P ON P.idPlaza = SS.Plaza
		INNER JOIN tb_CargosSalariales C ON C.idCargo =S.CargoSalarial
		INNER JOIN tb_Organizaciones O ON O.idOrganizaciones = P.Organizacion
		INNER JOIN tb_Funciones F ON F.idFuncion = P.Funcion
		INNER JOIN tb_TiposDeFuncion TF ON TF.idTipoFuncion = F.TipoDeFuncion
		INNER JOIN tb_Agentes A ON A.idAgente = S.Agente
		LEFT OUTER JOIN tb_Normas N ON N.idNorma = s.NormaAlta
WHERE  s.agente = @Agente 
	 AND ( s.FechaBaja BETWEEN @Desde AND @hasta) 
	AND s.causabaja NOT IN (2,16)				--renuncia
	AND (@SituacionRevista IS NULL OR S.SituacionRevista = @SituacionRevista) 				
	AND TF.idTipoFuncion NOT IN (13,18) 				--Directivo FAlumnos, Directivo NFAlumno
	AND O.Esprivada = 'N'								--Público
	AND ((@OrganizacionAnalizar IS NULL AND 1=1) OR (@OrganizacionAnalizar IS NOT NULL AND S.UbicacionOrig = @OrganizacionAnalizar))
--preguntar
	AND S.cargoSalarial NOT IN (79,6104,6105)			-- 'ASISTENTE TECNICO DE PROYECTOS' / 'ANALISTA PRINCIPAL TEC. DOC.' / 'ANALISTA AUXILIAR TEC.DOC.'
--veo los que cambiaron de cargo
--	AND S.cargosalarial IN (2821,3433,3431,3432)
--	AND S.CargoSalarial IN (3129,2829,3218,3310,3528)
--	AND S.CargoSalarial IN (2901,3001)	
	AND S.CargoSalarial NOT IN (2821,3433,3431,3432,3129,2829,3218,3310,3528,2901,3001)
	AND O.cuise > 300  AND O.Cuise NOT IN (2600) 	AND O.Cuise NOT BETWEEN 9000 AND 9999
	AND S.TipoDeServicio = 1 
	AND (S.EstaEnProcesoDeTitularizacion IS NULL OR  S.EstaEnProcesoDeTitularizacion = 'N')
	AND S.CargoSalarial  NOT IN (SELECT IDCargo FROM tb_CargosSalariales WHERE Escalafon IN (15, 24))

	ORDER BY s.FechaAlta

FOR READ ONLY


OPEN SubServicios

fetch next from SubServicios into @FA, @FB, @Baja

while @@fetch_status = 0
BEGIN
	-- SituacionLaboralAsociada de la Licencia en 4 ('Lic. S/Goce Hab.') 
	--if (Select SituacionLaboralAsociada from tb_Licencias where idLicencia = @Licencia) NOT IN (4,10) Or ( @Licencia Is NULL)
		--begin
		if @baja = 'N' or @FB > @Hasta
			Select @FB = @Hasta
	   	if @FA>@PB
			BEGIN
	   		IF @pa<=@Pb 
				Select @Resultado=@Resultado+(datediff(day,@PA,@PB)+1)
				
			Select @PA=@FA,@PB=@FB
			end
		else
			begin
			if @FB>@PB
				Select @PB = @FB
			end
		--end

	fetch next from SubServicios into  @FA, @FB, @Baja
end

close SubServicios
deallocate SubServicios
IF @pa<>@Pb 
	select @resultado = @resultado+(datediff(day, @PA,@PB)+1)


RETURN (@Resultado)

END




























GO
